package test.result ;

/**
 * 接口返回的数据对象
 * @author 80002165 @data 2017年8月1日 上午9:09:04
 */
public class ServerResponse<T> {
    private int code ;
    private String msg ;
    private T data ;
    
    private ServerResponse(int code, String msg) {
        super() ;
        this.code = code ;
        this.msg = msg ;
    }
    
    private ServerResponse(int code, String msg, T data) {
        super() ;
        this.code = code ;
        this.msg = msg ;
        this.data = data ;
    }
    
    public int getCode() {
        return code ;
    }
    
    public String getMsg() {
        return msg ;
    }
    
    public T getData() {
        return data ;
    }
    
    /**
     * 返回成功
     * @author 80002165 @data 2017年8月1日 上午9:22:41
     * @param data
     * @return
     */
    public static <T> ServerResponse<T> createBySuccess(T data) {
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getDesc(), data) ;
    }
    
    public static <T> ServerResponse<T> createBySuccess(String msg, T data) {
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg, data) ;
    }
    
    /**
     * 返回成功，仅包含成功信息，无返回参数
     * @author 80002165 @data 2017年8月1日 上午9:25:01
     * @param msg
     * @return
     */
    public static <T> ServerResponse<T> createBySuccessMsg(String msg) {
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg) ;
    }
    
    /*
     * public static <T> ServerResponse<T> createBySuccess(int code, String msg,
     * T data){ return new ServerResponse<T>(code, msg, data) ; }
     */
    
    /**
     * 返回失败，
     * @author 80002165 @data 2017年8月1日 上午9:25:01
     * @param msg
     * @param data
     * @return
     */
    public static <T> ServerResponse<T> createByError(String msg, T data) {
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), msg, data) ;
    }
    
    public static <T> ServerResponse<T> createByError(String msg) {
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), msg) ;
    }
    
    public static <T> ServerResponse<T> createByError() {
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getDesc()) ;
    }
    
    public static <T> ServerResponse<T> createByErrorMsg(String msg) {
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), msg) ;
    }
    
    public static <T> ServerResponse<T> createByErrorCodeMsg(int code, String msg, T data) {
        return new ServerResponse<T>(code, msg, data) ;
    }
    
    public static <T> ServerResponse<T> createByErrorCodeMsg(int code, String msg) {
        return new ServerResponse<T>(code, msg) ;
    }
    
    /**
     * 判断当前对象是否成功
     * @author 80002165 @data 2017年8月1日 上午9:23:37
     * @return
     */
    public boolean isSuccess() {
        if (this.code == ResponseCode.SUCCESS.getCode()) {
            return true ;
        }
        return false ;
    }
    
}
